package com.V4Creations.vtulife.view.fragments;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.V4Creations.vtulife.R;
import com.V4Creations.vtulife.controller.adapters.VTULifeFragmentAdapter.FragmentInfo;
import com.V4Creations.vtulife.model.ActionBarStatus;
import com.V4Creations.vtulife.util.VTULifeConstance;
import com.V4Creations.vtulife.util.system.SystemFeatureChecker;
import com.V4Creations.vtulife.view.activity.VTULifeMainActivity;
import de.keyboardsurfer.android.widget.crouton.Style;
public class WebFragment extends Fragment implements FragmentInfo {
String TAG = "WebFragment";
private VTULifeMainActivity activity;
private WebView mWebView;
private boolean isForwardEnabled = false, isBackEnabled = true,
isRefresh = true;
private ProgressBar loadingProgressBar;
private TextView progressTextView;
private String currentUrl;
private ActionBarStatus mActionBarStatus;
public WebFragment() {
mActionBarStatus = new ActionBarStatus();
currentUrl = VTULifeConstance.WEB_URL;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
activity = (VTULifeMainActivity) getActivity();
return inflater.inflate(R.layout.fragment_web, null, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initViews();
mWebView.loadUrl(currentUrl);
}
private void initViews() {
loadingProgressBar = (ProgressBar) getView().findViewById(
R.id.loadingProgressBar);
progressTextView = (TextView) getView().findViewById(
R.id.progressTextView);
hideLodingProgressBar();
mWebView = (WebView) getView().findViewById(R.id.vtuLifeWebView);
initWebView();
}
@SuppressLint({ "SetJavaScriptEnabled", "JavascriptInterface" })
private void initWebView() {
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
loadingProgressBar.setProgress(progress);
}
});
mWebView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
activity.showCrouton(description, Style.ALERT, false);
showReload();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
isRefresh = false;
isBackEnabled = mWebView.canGoBack();
isForwardEnabled = mWebView.canGoForward();
mActionBarStatus.subTitle = getString(R.string.loading);
activity.reflectActionBarChange(mActionBarStatus,
VTULifeMainActivity.ID_VTU_LIFE_WEB_FRAGMENT, true);
showLoadingProgressBar();
}
@Override
public void onPageFinished(WebView view, String url) {
currentUrl = url;
mWebView.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
isRefresh = true;
isBackEnabled = mWebView.canGoBack();
isForwardEnabled = mWebView.canGoForward();
mActionBarStatus.subTitle = null;
activity.reflectActionBarChange(mActionBarStatus,
VTULifeMainActivity.ID_VTU_LIFE_WEB_FRAGMENT, true);
hideLodingProgressBar();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals(SystemFeatureChecker.getAppPlayStoreURL()))
activity.showRateApp();
else if (url.contains("classresults.php"))
activity.changeCurrentFragemnt(VTULifeMainActivity.ID_CLASS_RESULT_FRAGMENT);
else if (url.contains("fastresults.php"))
activity.changeCurrentFragemnt(VTULifeMainActivity.ID_FAST_RESULT_FRAGMENT);
else if (url.contains("resource"))
activity.changeCurrentFragemnt(VTULifeMainActivity.ID_DIRECTORY_LISTING_FRAGMENT);
else if (url.contains("upload.html"))
activity.changeCurrentFragemnt(VTULifeMainActivity.ID_UPLOAD_FILE_FRAGEMENT);
else
view.loadUrl(url);
return true;
}
});
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
SystemFeatureChecker.downloadFile(activity, url, false);
activity.showCrouton(R.string.downloading_started, Style.INFO,
false);
}
});
}
class JavaScriptInterface {
public void showHTML(String html) {
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.vtu_life_web_layout, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
if (!activity.isNavigationDrawerOpen()) {
MenuItem forwardMenuItem = menu.findItem(R.id.menu_forward);
MenuItem backMenuItem = menu.findItem(R.id.menu_back);
MenuItem refreshMenuItem = menu.findItem(R.id.menu_refresh);
if (isForwardEnabled) {
forwardMenuItem.setEnabled(true);
forwardMenuItem.setIcon(R.drawable.ic_action_next_item);
} else {
forwardMenuItem.setEnabled(false);
forwardMenuItem
.setIcon(R.drawable.ic_action_next_item_disabled);
}
if (isBackEnabled) {
backMenuItem.setEnabled(true);
backMenuItem.setIcon(R.drawable.ic_action_previous_item);
} else {
backMenuItem.setEnabled(false);
backMenuItem
.setIcon(R.drawable.ic_action_previous_item_disabled);
}
if (isRefresh)
refreshMenuItem.setIcon(R.drawable.ic_action_refresh);
else
refreshMenuItem.setIcon(R.drawable.ic_action_cancel);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.menu_back:
mWebView.goBack();
return true;
case R.id.menu_forward:
mWebView.goForward();
return true;
case R.id.menu_refresh:
if (isRefresh)
mWebView.reload();
else {
isRefresh = true;
activity.supportInvalidateOptionsMenu();
mWebView.stopLoading();
}
return true;
}
return false;
}
private void hideLodingProgressBar() {
loadingProgressBar.setVisibility(View.GONE);
}
private void showLoadingProgressBar() {
loadingProgressBar.setProgress(0);
loadingProgressBar.setVisibility(View.VISIBLE);
progressTextView.setVisibility(View.GONE);
}
private void showReload() {
hideLodingProgressBar();
progressTextView.setVisibility(View.VISIBLE);
}
@Override
public String getTitle(Context context) {
return WebFragment.getFeatureName(context);
}
@Override
public ActionBarStatus getActionBarStatus() {
return mActionBarStatus;
}
public static String getFeatureName(Context context) {
return context.getString(R.string.website);
}
}